<?php

/**
 * 文章管理模型
 */
class ArticleModel extends Model {

	/**
	 * 必须填写的字段
	 */
	public $validate = array( array('title', 'nonull', '文章标题必须填写', 2, 3), array('author', 'nonull', '作者必须填写', 2, 3), array('digest', 'nonull', '文章摘要必须填写', 2, 3), array('keywords', 'nonull', '文章关键字必须填写', 2, 3), array('description', 'nonull', '文章描述必须填写', 2, 3), array('content', 'nonull', '文章内容必须填写', 2, 3));

	/**
	 *  自动处理一些字段
	 */
	public $auto = array(
	//自动添加sendtime发布时间
	array('sendtime', 'time', 'function', 2, 1),
	//自动将attr数组转为一个字符串
	array('attr', 'arToStr', 'method', 2, 3), );
	/**
	 * 彻底删除一个文章
	 * 1、删除文章标题表  article
	 * 2、删除文章内容表 article_data
	 * 3、删除标签表   article_tag
	 * 4、删除文章回复表 comment
	 */
	public function trueDel($aid) {
		//删除article表
		$delArt 	= $this -> table('article') -> where("aid={$aid}") -> delete();
		//删除article_data
		$delArtData = $this -> table('article_data') -> where("article_aid={$aid}") -> delete();
		//删除article_tag
		$delArt_tag = $this -> table('article_tag') -> where("article_aid={$aid}") -> delete();
		//删除comment表
		$delComment = $this -> table('comment') -> where("article_aid={$aid}") -> delete();
		
		if($delArt && $delArtData ){
			return true;
		}else{
			return false;
		}
		
	}

	/**
	 * 查询所有文章  is_recycle为0 的文章
	 * 查询所有相关的文章要关联文章表和分类 表
	 * 表示没有被删除的文章
	 * @return array
	 */
	public function findAllArticle($limit, $status = 0) {
		//查询出所有文章字段is_reclycle为0的文章表示为不被删除的文章
		$arts = $this -> join('__article__ a JOIN __category__ c ON a.category_cid=c.cid') -> where('a.is_recycle=' . $status) -> field('aid,title,attr,click,sendtime,updatetime,cname,author') -> limit($limit) -> order('sendtime DESC') -> select();
		//返回分页后的数据
		return $arts;
	}

	/**
	 * 将一个数组组合成一个字符串1,2,3
	 */
	public function arToStr($arr) {
		if ($arr) {
			return implode(',', $arr);
		} else {
			return null;
		}
	}

	/**
	 * 查询相应的文章的相应的
	 * 标签中间表、内容表、文章表、分类表
	 */

	public function findArtInfo($aid) {

		//文章表 查询出相应$aid的文章表
		$artContent = $this -> join('__article__ a JOIN __article_data__ ad ON a.aid=ad.article_aid') -> where("aid={$aid}") -> find();
		//文章内容表查询出相应$aid的文章内容  将attr转为 一个数组
		$artContent['commentcount'] = $this->table('comment')->where("article_aid={$artContent['aid']}")->count();
		$artContent['category'] = $this->table('category')->field('cid,cname')->where("cid={$artContent['category_cid']}")->find();
		$artContent['attr'] = explode(',', $artContent['attr']);
		//查询出当前文章的标签
		$artContent['tags'] = $this->join('__tag__ t JOIN __article_tag__ at ON t.tid=at.tag_tid')->where("at.article_aid={$artContent['aid']}")->all();
		return $artContent;
	}

	/**
	 * 添加文章方法
	 * @param $post 表单数据
	 * @param $content 文章内容没过滤
	 */
	public function addArticle($content) {
		if (!$this -> create())
			return false;
		//重新将没有被处理过的内容放回数据
		$this -> data['content'] = $content;
		//将要写入文章标签表的数据
		$artTitleData = array();
		$artTitleData['title'] = $this -> data['title'];
		$artTitleData['sendtime'] = $this -> data['sendtime'];
		$artTitleData['digest'] = $this -> data['digest'];
		$artTitleData['attr'] = $this -> data['attr'];
		$artTitleData['title'] = $this -> data['title'];
		$artTitleData['author'] = $this -> data['author'];
		$artTitleData['thumb'] = $this -> data['thumb'];
		$artTitleData['category_cid'] = $this -> data['category_cid'];
		$artTitleData['user_uid'] = session('aid');
		//将要写入文章内容表的数据
		$artContentData = array();
		$artContentData['keywords'] = $this -> data['keywords'];
		$artContentData['content'] = $this -> data['content'];
		$artContentData['description'] = $this -> data['description'];
		//将要写入标签文章关系表的数据
		$artTagData = array();
		$artTagData['category_cid'] = $this -> data['category_cid'];
		$tagids = $this -> data['tag_tid'];
		//将数据插入数据库中返回 新数据的aid
		$aid = $this -> add($artTitleData);
		$artContentData['article_aid'] = $aid;
		$artTagData['article_aid'] = $aid;
		//写入文章内容表
		$this -> table('article_data') -> add($artContentData);
		//将该文章的所有标签写入中间表中
		for ($i = 0, $c = count($tagids); $i < $c; $i++) {
			$artTagData['tag_tid'] = $tagids[$i];
			$this -> table('article_tag') -> add($artTagData);
		}
		return true;
	}

	/**
	 * 更新文章的方法
	 */
	public function updateArr($content) {
		if (!$this -> create())
			return false;
		//重新将没有被处理过的内容放回数据
		$this -> data['content'] = $content;
		$aid = $this -> data['aid'];
		//			echo $aid;die;
		//重新组装文章标题表数据
		$artTitleData = array();
		$artTitleData['title'] = $this -> data['title'];
		$artTitleData['digest'] = $this -> data['digest'];
		$artTitleData['attr'] = $this -> data['attr'];
		$artTitleData['title'] = $this -> data['title'];
		$artTitleData['author'] = $this -> data['author'];
		//如果没有上传图片那么就不更新缩略图如果上传了图片就更新
		if ($this -> data['thumb'] != '') {
			$artTitleData['thumb'] = $this -> data['thumb'];
		}

		$artTitleData['category_cid'] = $this -> data['category_cid'];
		//重新组装文章内容表数据
		$artContentData = array();
		$artContentData['keywords'] = $this -> data['keywords'];
		$artContentData['content'] = $this -> data['content'];
		$artContentData['description'] = $this -> data['description'];
		//将要写入标签文章关系表的数据
		$artTagData = array();
		$artTagData['category_cid'] = $this -> data['category_cid'];
		$artTagData['article_aid'] = $aid;
		$tagids = @$this -> data['tag_tid'];
		//更新文章标题表
		$this -> where("aid={$aid}") -> save($artTitleData);
		//更新文章内容表
		M('article_data') -> where("article_aid={$aid}") -> save($artContentData);
		//			//删除原来的标签内容
		$tags = $this -> table('article_tag') -> where("article_aid={$aid}") -> select();

		$this -> table('article_tag') -> where("article_aid={$aid}") -> delete();
		//将该文章的所有标签写入中间表中
		for ($i = 0, $c = count($tagids); $i < $c; $i++) {
			$artTagData['tag_tid'] = $tagids[$i];
			$this -> table('article_tag') -> add($artTagData);
		}
		return true;
	}

	/**
	 * 查询出按相应排序和相应条件的文章
	 */
	 public function findSpeExp($exp="",$order='sendtime DESC',$limit='5',$field='*'){
	 	return $this->field($field)->join('__article__ a JOIN __category__ c ON a.category_cid=c.cid')->where($exp)->order($order)->limit($limit)->all();
	 }












};
